package main

import "fmt"


// 函数存在意义， 函数是一段代码的封装
//把一段逻辑封装到一个函数中，给它起个名字，每次用到它的时候直接用函数名调用就行
// 通过函数名能够让代码更清晰，更简洁
//函数定义
func sunx(x int, y int) (ret int) {

	return x + y

}

// 没有返回值，有参数
func sum1(x int,y int) {
    fmt.Println(x + y)

}

// 没有参数但是有返回值
func sum2() int{
	return 3
}

// 返回值可以命名也可以不命名
// 命名的返回值就相当于在函数中声明了一个遍历
func f4(x int, y int) (ret int) {
	ret = x + y
	return		// 可以省略
}

// 多个返回值

func f5() (int, string) {
	return 1, "xx"
}

// 参数的类型简写

func f6(x, y int, m,n string) int {
	return x + y
}

// 可变长参数
func f7(x string, y ...int) {
	fmt.Println(x)
	fmt.Println(y)
}
// f7("xxx", 1,2,3,4,5)  //一个或者多个，但是可变长参数一定放后面

// Go语言中函数没有默认参数这个概念


func main() {
	r := sunx(1, 2)
	fmt.Println(r)
	m ,n := f5()
	fmt.Println(m ,n)
	f7("xx", 1,3,4,5)
	//不能再嵌套函数
	// func xxxx(){}
}
